package com.yuyou.fn.common.util;

import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.text.DecimalFormat;

public class BigDecimals {

    public static int compare(BigDecimal b1 , BigDecimal b2 ){

        long l1 = b1.multiply(BigDecimal.valueOf(100)).setScale(0,BigDecimal.ROUND_HALF_UP).longValue();
        long l2 = b2.multiply(BigDecimal.valueOf(100)).setScale(0,BigDecimal.ROUND_HALF_UP).longValue();

        return (int)(l1 - l2) ;
    }



    public static BigDecimal min(BigDecimal b1, BigDecimal b2 ) {
        if(compare( b1 ,  b2 ) < 0 ){
            return b1 ;
        }else{
            return b2 ;
        }
    }

    public static BigDecimal max(BigDecimal b1, BigDecimal b2) {
        if(compare( b1 ,  b2 ) < 0 ){
            return b2 ;
        }else{
            return b1 ;
        }

    }

    public static BigDecimal integer(BigDecimal b ){
        return BigDecimal.valueOf( b.setScale(0,BigDecimal.ROUND_HALF_UP).longValue() );
    }

    public static void main(String[] args) {
        System.out.println(compare(BigDecimal.valueOf(2) ,BigDecimal.valueOf(1)));
    }

    /**
     *
     * @param amount
     * @param numerator 分子
     * @param denominator 分母
     * @return
     */
    public static BigDecimal calProportion(BigDecimal amount , BigDecimal numerator , BigDecimal denominator ){

        if(BigDecimals.compare(amount,BigDecimal.ZERO) == 0 || BigDecimals.compare(numerator,BigDecimal.ZERO) == 0 || BigDecimals.compare(denominator,BigDecimal.ZERO) == 0 ){
            return BigDecimal.ZERO ;
        }
        return amount.multiply(numerator.divide(denominator , 10 , BigDecimal.ROUND_HALF_UP )).divide(BigDecimal.ONE,10,BigDecimal.ROUND_HALF_UP) ;
    }

    public static boolean isZero(BigDecimal value) throws UnsupportedEncodingException {
        return (long) (value.doubleValue() * 100) == 0l;
    }

    public static BigDecimal toFixed2(BigDecimal bigDecimal,int num){
        if (bigDecimal==null){
            return BigDecimal.ZERO;
        }
        if (num<0){
            throw new IllegalArgumentException("Illegal arguments");
        }
        BigDecimal result=bigDecimal.setScale(num,BigDecimal.ROUND_HALF_UP);
        return result;
    }

    public static String formatBigDecimal(BigDecimal value, String format) {
        if (value == null) {
            value = BigDecimal.ZERO ;
        }
        return new DecimalFormat(format).format(value);
    }


}
